#ifndef _NE_XML_TOOL_H_
#define _NE_XML_TOOL_H_

#include <mathematics/Vector2.h>
#include <mathematics/Vector3.h>
#include <mathematics/Vector4.h>
#include <mathematics/Color.h>
#include <mathematics/Quaternion.h>
#include <mathematics/Matrix3.h>
#include <mathematics/Matrix4.h>
#include <third/TinyXML.h>

namespace ne
{
    class NEAPI XMLTool
    {
        public:
        /*
            static void SetProperty(XMLElement *pElement, const std::string &name, const byte &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const char &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const int16_t &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const uint16_t &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const int32_t &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const uint32_t &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const int64_t &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const uint64_t &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const real &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const std::string &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Vector2 &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Vector3 &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Vector4 &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Quaternion &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Matrix3 &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Matrix4 &a);
            static void SetProperty(XMLElement *pElement, const std::string &name, const Color &a);

            static bool GetProperty(XMLElement *pElement, const std::string &name, byte &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, char &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, int16_t &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, uint16_t &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, int32_t &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, uint32_t &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, int64_t &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, uint64_t &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, real &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, std::string &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Vector2 &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Vector3 &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Vector4 &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Quaternion &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Matrix3 &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Matrix4 &a);
            static bool GetProperty(XMLElement *pElement, const std::string &name, Color &a);

            static XMLElement* GetPropertyElement(XMLElement *pElement, const std::string &name);

            static bool RemoveProperty(XMLElement *pElement, const std::string &name);
        */

        public:
            static const std::string XML_AT_BYTE;
            static const std::string XML_AT_CHAR;
            static const std::string XML_AT_SHORT;
            static const std::string XML_AT_USHORT;
            static const std::string XML_AT_INT;
            static const std::string XML_AT_UINT;
            static const std::string XML_AT_INT64;
            static const std::string XML_AT_UINT64;
            static const std::string XML_AT_REAL;
            static const std::string XML_AT_STRING;
            static const std::string XML_AT_VEC2;
            static const std::string XML_AT_VEC3;
            static const std::string XML_AT_VEC4;
            static const std::string XML_AT_QUAT;
            static const std::string XML_AT_MAT3;
            static const std::string XML_AT_MAT4;
            static const std::string XML_AT_COLOR;
    };
}

#endif
